3 import java
.awt
.FontMetrics
;
4 import java
.awt
.Graphics
;
5 import java
.util
.Observable
;
6 import java
.util
.Observer
;
10 import controllers
.SelectionController
;
11 import models
.GraphEdge
;
12 import models
.GraphModel
;
13 import models
.GraphVertex
;
15 public class GraphPanel
extends JPanel
implements Observer
{
16 private static final long serialVersionUID
= 1388592199136335514L;
17 private GraphModel model
;
18 private SelectionController selectionController
;
20 public GraphPanel(GraphModel model
){
21 this.setSize(500, 400);
22 this.setBackground(Color
.BLUE
);
25 GraphVertex a
= new GraphVertex();
26 GraphVertex b
= new GraphVertex();
27 GraphVertex c
= new GraphVertex();
29 GraphEdge edge1
= new GraphEdge(new GraphVertex
[] {a
,b
});
30 GraphEdge edge2
= new GraphEdge(new GraphVertex
[] {b
,c
});
31 GraphEdge edge3
= new GraphEdge(new GraphVertex
[] {c
,a
});
33 model
.addGraph(a
,b
,c
);
34 model
.addEdge(edge1
,edge2
,edge3
);
35 model
.addObserver(this);
38 public void setSelectionController(SelectionController controller
)
40 this.selectionController
= controller
;
43 public void setModel(GraphModel model
){
44 if(this.model
!= null){
45 this.model
.deleteObserver(this);
48 model
.addObserver(this);
49 selectionController
.setModel(model
);
54 addNode(new GraphVertex());
56 public void addNode(GraphVertex o
)
61 public GraphVertex
deleteSelectedNode()
63 GraphVertex o
= selectionController
.getSelectedVertex();
68 public void deleteNode(GraphVertex o
)
71 selectionController
.removeSelected();
74 public GraphModel
getModel(){
78 public int getDrawTextWidth(String in
)
80 FontMetrics fm
= this.getFontMetrics(this.getFont());
81 int width
= fm
.stringWidth(in
);
86 public void paintComponent(Graphics g
)
88 System
.out
.println("paintComponent");
89 g
.setColor(this.getBackground());
90 g
.fillRect(0, 0, getWidth(), getHeight());
93 GraphEdge
[] edges
= model
.getEdges();
94 g
.setColor(Color
.cyan
);
95 for(int i
=0; i
< edges
.length
; i
++){
96 GraphEdge edge
= edges
[i
];
97 GraphVertex
[] vertexes
= edge
.getNodes();
98 g
.drawLine(vertexes
[0].getX() + (vertexes
[0].getWidth()/2),
99 vertexes
[0].getY() + (vertexes
[0].getHeight()/2),
100 vertexes
[1].getX() + (vertexes
[1].getWidth()/2),
101 vertexes
[1].getY() + (vertexes
[0].getHeight()/2));
104 // Draw Adding vertex line if needed
105 if(this.selectionController
!= null && this.selectionController
.isAddingEdge()){
107 g
.setColor(Color
.red
);
108 GraphVertex origen
= this.selectionController
.getSelectedVertex();
109 g
.drawLine( origen
.getX() + (origen
.getWidth()/2),
110 origen
.getY() + (origen
.getHeight()/2),
111 selectionController
.getMouseX(),selectionController
.getMouseY());
114 GraphVertex
[] objects
= model
.getVertexes();
115 for(int i
=0; i
< objects
.length
; i
++){
116 GraphVertex o
= objects
[i
];
117 g
.setColor(Color
.white
);
118 g
.fillRect(o
.getX(), o
.getY(), o
.getWidth(), o
.getHeight());
120 g
.setColor(Color
.red
);
122 g
.setColor(Color
.black
);
124 g
.drawRect(o
.getX(), o
.getY(),o
.getWidth(), o
.getHeight());
125 g
.setColor(Color
.black
);
126 g
.drawString(o
.getName(), o
.getX()+10, o
.getY()+25);
132 public void update(Observable arg0
, Object arg1
) {
134 System
.out
.println("Refresh @ graphpanel" + arg0
.toString());
137 System
.out
.println("FOUT: onbekend object riep GraphPanel.update aan: " + arg0
.toString());